package compilador;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 *
 * @author João Carlos
 */
public class Leitor {

    private static Leitor leitor = null;
    private BufferedReader in = null;

    private Leitor(String path) {
        //super();
        try {
            FileReader fr = new FileReader(path);
            this.in = new BufferedReader(fr);
        } catch (FileNotFoundException e) {
            System.err.println("[ERRO] - Arquivo não encontrado em >> " + path);
            System.exit(0);
        }
    }

    /**
     * Esta classe carrega apenas um arquivo por vez.<br>
     * Uma vez que não há possibilidade de carregar mais de um<br>
     * arquivo por vez.<br>
     * A utilização do padrão Singleton visa evitar a criação <br>
     * desnecessária de objetos.
     * @param path - Caminho do Arquivo.
     * @return Singleton da classe leitora do Arquivo!
     */
    public static Leitor getInstance(String path) {
        if (leitor == null) {
            leitor = new Leitor(path);
        }

        return leitor;
    }

    /**
     * Função necessária para a leitura do arquivo que está atualmente<br>
     * no stream de leitura para processamento.
     * @return A proxima linha a ser lida ou nulo se fim do Arquivo.
     */
    public String proximaLinha() {
        String str = null;
        try {
            if (in.ready()) {
                str = in.readLine();
                str = str.trim();
            } else {
                in.close();
                str = null;
                leitor = null;
            }
        } catch (IOException e) {
            System.err.println("[ERRO] - Não foi possível ler o Arquivo!");
            System.exit(0);
        }
        return str;
    }
}
